﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once

#include "IElementInput.h"

namespace gcmp
{
    class IDocument;
    class IParameterValueStorage;

    /// \brief 构件创建所需的数据结构。
    class GCMP_MODEL_INTERFACE_EXPORT IInstanceInput : public IElementInput
    {
    public:
        /// \brief 析构函数
        virtual ~IInstanceInput(){}

        /// \brief 获取创建构件的族Id
        /// \return 返回族的ElementId
        virtual const ElementId& GetFamilyId() const = 0;

        /// \brief 设置创建构件的族Id
        /// \param value 族的ElementId
        virtual void SetFamilyId(const ElementId& value) = 0;

        /// \brief 获取创建构件的族类型名称
        /// \return 返回族类型名称
        virtual const std::wstring& GetFamilyType() const = 0;

        /// \brief 设置创建构件的族类型名称
        /// \param value 族类型名称
        virtual void SetFamilyType(const std::wstring& value) = 0;

        /// \brief 获取创建构件的顶部关联平面Id
        /// \return 返回关联平面Id
        virtual const ElementId& GetTopAssociatedPlaneId() const = 0;

        /// \brief 设置创建构件的顶部关联平面Id
        /// \param value 关联平面Id
        virtual void SetTopAssociatedPlaneId(const ElementId& value) = 0;

        /// \brief 获取创建的构件是否可共享
        /// \return 如果可共享返回true，否则返回false
        virtual bool GetCanBeShared() const = 0;

        /// \brief 设置创建的构件是否可共享
        /// \param value true则可共享，false则不可共享
        virtual void SetCanBeShared(bool value) = 0;

        /// \brief 获取起点偏移
        /// \return 返回起点偏移
        virtual double GetStartHeightOffset() const = 0;

        /// \brief 设置起点偏移
        /// \param 新的起点偏移值
        virtual void SetStartHeightOffset(double value) = 0;

        /// \brief 获取终点偏移
        /// \return 返回终点偏移
        virtual double GetEndHeightOffset() const = 0;

        /// \brief 设置终点偏移
        /// \param 新的终点偏移值
        virtual void SetEndHeightOffset(double value) = 0;
    };
}

